#include <iostream>

using namespace std;

/**
 * 指针 
*/

void test1(){
   /**
    * 指针与数组
   */

   int  var[3] = {10, 100, 200};
   int  *ptr;
 
   // 指针中的数组地址
   ptr = var;
   for (int i = 0; i < 3; i++)
   {
      cout << "var[" << i << "]的内存地址为 ";
      cout << ptr << endl;
 
      cout << "var[" << i << "] 的值为 ";
      cout << *ptr << endl;
 
      // 移动到下一个位置
      ptr++;
   }
}

void test2(){
   /**
    * 指针数组
   */

   int  var[3] = {10, 100, 200};
   int *ptr[3];
 
   for (int i = 0; i < 3; i++)
   {
      ptr[i] = &var[i]; // 赋值为整数的地址
   }
   for (int i = 0; i < 3; i++)
   {
      cout << "Value of var[" << i << "] = ";
      cout << *ptr[i] << endl;
   }
}

void test3(){
   /**
    * 指向指针的指针（多级间接寻址）   
   */
    int  var;
    int  *ptr;
    int  **pptr;
 
    var = 3000;
 
    // 获取 var 的地址
    ptr = &var;
 
    // 使用运算符 & 获取 ptr 的地址
    pptr = &ptr;
 
    // 使用 pptr 获取值
    cout << "var 值为 :" << var << endl;
    cout << "*ptr 值为:" << *ptr << endl;
    cout << "**pptr 值为:" << **pptr << endl;

}


void change(int *par)
{
   *par = 33;
}

void test4(){
   /**
    * 传递指针给函数
   */
   int num = 10;
   int *ptr = &num;

   cout << *ptr << endl; // 10
   change(ptr);
   cout << *ptr << endl; // 33
}

int* test5(){
   static int count = 88;
   return &count;
}

int main ()
{
   int *ptr;
   ptr = test5();

   cout << *ptr << endl; // 88
 
   return 0;
}